<template>
  <div>
    <p :style="{ opacity: opt }">数字是:{{ count }}</p>
    <button @click="count++">点击+1</button>
    <button @click="getDestory">卸载组件</button>
    <Teacher :school="school" :goSchool="goSchool" />
    <Student :school="school" />
  </div>
</template>
<script>
import Teacher from "@/components/Teacher";
import Student from "@/components/Student";
export default {
  name: "App",
  // 注册
  components: { Teacher, Student },
  data() {
    return {
      count: 0,
      opt: 1,
      school: "清华大学",
    };
  },
  methods: {
    getDestory() {
      this.$destroy();
    },
    goSchool() {
      this.school = "北京大学";
    },
  },
  // beforeCreate初始化开始 里面的data数据和methods里的方法都还没有挂载上
  beforeCreate() {
    console.log(this);
    debugger;
  },
  //初始化数据检测,数据挟持后 可以看到data数据 和methods里的方法
  created() {
    console.log(this, "初始化完成后");
  },
  // 在此之间的阶段 Vue开始解析模板生成虚拟dom 先判断有没有el 有就判断有没有模板(template)如果有直接解构模板
  // 挂载完成前 这时是虚拟dom
  beforeMount() {
    console.log(this.count);
  },
  // 将内存中的虚拟dom转为真实dom插入页面
  // 挂载完成后 页面显示的是经过Vue编译的Dom 一般在这里写:开启定时器,发送api请求
  // 订阅消息 绑定自定义事件的初始化操作
  mounted() {
    setInterval(() => {
      this.opt -= 0.1;
      if (this.opt < 0) {
        this.opt = 1;
      }
    }, 100);
  },
  // 更新前 此时:数据是新的,但页面时旧的:即页面和数据没保持同步
  beforeUpdate() {
    console.log(this);
  },
  // 根据新数据生成新的虚拟DOM,随后与旧的虚拟DOM进行比较,最终完成页面更新:即Model->view的更新
  // 更新完成后
  updated() {
    console.log(this);
  },
  // 销毁前 vm中所有的data,methods,指令等等都处于可用的状态,马上要执行销毁过程,一帮在这阶段关闭定时器,取消订阅消息,解绑自定义事件等收尾操作
  beforeDestroy() {
    console.log(this);
  },
  // 销毁完 数据还有 但是不能操作
  destroyed() {
    console.log(this);
  },
};
</script>
<style>
</style>